﻿#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
using namespace std;

//class Date
//{
//public:
//	Date(int year, int month, int day,int x,int& i)
//		:_year(year)
//		,_month(month)
//		,_day(day)
//
//		,_x(x)
//		,_ref(i)
//	{};
//
//private:
//	int _year;
//	int _month;
//	int _day;
//
//	const int _x;
//	int& _ref;
//};
//
//int mian()
//{
//}

//typedef int DataType;
//class Stack
//{
//public:
//	Stack(size_t capacity)
//	{
//		_array = (DataType*)malloc(capacity * sizeof(DataType));
//		if (nullptr == _array)
//		{
//			perror("malloc申请空间失败");
//			return;
//		}
//		_size = 0;
//		_capacity = capacity;
//	}
//	void Push(const DataType& data)
//	{
//		// CheckCapacity();
//		_array[_size] = data;
//		_size++;
//	}
//	~Stack()
//	{
//		if (_array)
//		{
//			free(_array);
//			_array = nullptr;
//			_capacity = 0;
//			_size = 0;
//		}
//	}
//private:
//	DataType* _array;
//	size_t _size;
//	size_t _capacity;
//};
//
//class MyQueue
//{
//public:
//	MyQueue(int n)
//		:_pushst(n)
//		,_popst(n)
//	{}
//private:
//	Stack _pushst;
//	Stack _popst;
//	int _size;
//};

//class A
//{
//public:
//	A(int a)
//		:_a1(a)
//		, _a2(_a1)
//	{}
//
//	void Print() {
//		cout << _a1 << " " << _a2 << endl;
//	}
//private:
//	int _a2;
//	int _a1;
//};
//int main() {
//	A aa(1);
//	aa.Print();
//}

//class A
//{
//public:
//	A(int a)
//		:_a(a)
//	{}
//private:
//	int _a;
//};
//
//int main()
//{
//	A aa1(1);
//	//拷贝构造
//	A aa2 = aa1;
//
//	//隐式类型转换
//	//内置类型转换成自定义类型
//	A aa3 = 3;
//
//
//	return 0;
//}

//class Stack
//{
//public :
//	void push(const A& aa)
//	{
//		//...
//	}
//	//...
//};
//
//int main()
//{
//	Stack st;
//	A a1(1);
//	st.push(a1);
//
//	st.push(1);
//
//	return 0;
//}
//
//class A
//{
//public:
//	A()
//	{_count++;}
//	A(const A& t)
//	{_count++;}
//	~A()
//	{_count--;}
//
//private:
//	//声明
//	int _a = 1;
//	//声明
//	//静态区，不在对象中
//	//不能给缺省值，因为缺省值是给初始化列表
//	//它在静态区不在对象中，不在初始化列表中定义
//	static int _count;
//};
//
//class A
//{
//public:
//	static int GetCount()
//	{
//
//		return _count;
//	}
//private:
//	static int _count;
//};
//
////定义
//int A::_count = 1;
//
//int main()
//{
//	A a;
//	cout << a.GetCount() << endl;
//	cout << A::GetCount() << endl;
//	cout << A().GetCount() << endl;
//
//	return 0;
//}
//
//class Sum
//{
//public:
//    Sum()
//    {
//        sum += i;
//        i++;
//    }
//
//    static int GetSum()
//    {
//        return sum;
//    }
//private:
//    static int i;
//    static int sum;
//};
//
//int Sum::i = 1;
//
//
//class Solution {
//public:
//    int Sum_Solution(int n) {
//
//        return Sum::GetSum();
//    }
//};

//class Date
//{
//public:
//	friend ostream& operator<<(ostream& out, const Date& d);
//	friend istream& operator>>(istream& in, Date& d);
//
//	Date(int year = 1, int month = 1, int day = 1)
//		:_year(year)
//		, _month(month)
//		, _day(day)
//	{};
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//
//ostream& operator<<(ostream& out, const Date& d)
//{
//	cout << d._year << "年" << d._month << "月" << d._day << endl;
//
//	return out;
//}
//
//istream& operator>>(istream& in, Date& d)
//{
//	cin >> d._year >> d._month >> d._day;
//
//	return in;
//}

//int main()
//{
//	Date d1;
//	cin >> d1;
//	cout << d1;
//}
//class Time
//{
//	friend class Date;
//public:
//	Time(int hour = 0, int minute = 0, int second = 0)
//		: _hour(hour)
//		, _minute(minute)
//		, _second(second)
//	{}
//
//private:
//	int _hour;
//	int _minute;
//	int _second;
//};
//
//class Date
//{
//public:
//	Date(int year = 1900, int month = 1, int day = 1)
//		: _year(year)
//		, _month(month)
//		, _day(day)
//	{}
//
//	void SetTimeOfDate(int hour, int minute, int second)
//	{
//		_t._hour = hour;
//		_t._minute = minute;
//		_t._second = second;
//	}
//
//private:
//	int _year;
//	int _month;
//	int _day;
//	Time _t;
//};
//
//
//int main()
//{
//
//}



//
//class A
//{
//private:
//	static int k;
//	int h;
//public:
//	class B // B天生就是A的友元
//	{
//	public:
//		void foo(const A& a)
//		{
//			cout << k << endl;//OK
//			cout << a.h << endl;//OK
//		}
//	};
//};
//
//int A::k = 1;
//int main()
//{
//	A::B b;
//	b.foo(A());
//
//	return 0;
//}


//class A
//{
//public:
//	class B // B天生就是A的友元
//	{
//	private:
//		int _b;
//	};
//
//private:
//	int h;
//};
//
//int main()
//{
//	cout << sizeof(A) << endl;
//
//	return 0;
//}

class A
{
public:
	A(int a = 0)
	{
		cout << "A(int a)" << endl;
	}
	~A()
	{
		cout << "~A()" << endl;
	}
private:
	int _a;
};

int main()
{
	A aa1;
	// 不能这么定义对象，因为编译器无法识别下面是一个函数声明，还是对象定义
	//A aa1();
	// 但是我们可以这么定义匿名对象，匿名对象的特点不用取名字，
	// 但是他的生命周期只有这一行，我们可以看到下一行他就会自动调用析构函数
	A();
	cout << endl;

	A(1);

	return 0;
}

//class Solution {
//public:
//    class Sum
//    {
//    public:
//        Sum()
//        {
//            sum += i;
//            i++;
//        }
//
//        static int GetSum()
//        {
//            return sum;
//        }
//    private:
//        static int i;
//        static int sum;
//    };
//
//    int Sum_Solution(int n) {
//      //  Sum a[n];
//
//        return Sum::GetSum();
//    }
//};

